package agendamento;

import hibernate.dao.AgendamentoDAO;
import hibernate.dao.ClienteDAO;
import hibernate.dao.FuncionarioDAO;
import hibernate.entity.Agendamento;
import hibernate.entity.Cliente;
import hibernate.entity.Funcionario;
import hibernate.entity.Servico;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import com.toedter.calendar.JDateChooser;

public class CtrlAgendamento {
	private AgendamentoDAO dao = new AgendamentoDAO();
	private ClienteDAO cliDao = new ClienteDAO();
	private FuncionarioDAO funDao = new FuncionarioDAO();

	public void preencheCbHorario(JComboBox cbHorario, JDateChooser data) {
		String[] horarios = { "06:00", "06:30", "07:00", "07:30", "08:00",
				"08:30", "09:00", "09:30", "10:00", "10:30", "11:00", "11:30",
				"12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00",
				"15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30",
				"19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00",
				"22:30", "23:00", "23:30", "00:00" };

		List<String> horas = new ArrayList<String>();

		for (int i = 0; i < horarios.length; i++) {
			horas.add(horarios[i]);
		}

		List<Agendamento> lista = dao.getAgendamento(new SimpleDateFormat(
				"dd/MM/yyyy").format(data.getDate()));

		for (int i = 0; i < lista.size(); i++) {
			for (int j = 0; j < horas.size(); j++) {
				if (horas.get(j).equals(lista.get(i).getHorario())) {
					horas.remove(j);
				}
			}

		}

		for (int i = 0; i < horas.size(); i++) {
			cbHorario.addItem(horas.get(i));
		}

	}

	public void preencheTabela(JTable tbAgendamento, JDateChooser dt) {
		try {
			tbAgendamento.setModel(new AgendamentoTableModel(
					new SimpleDateFormat("dd/MM/yyyy").format(dt.getDate())));
			tbAgendamento.getColumnModel().getColumn(0).setPreferredWidth(130);
			tbAgendamento.getColumnModel().getColumn(1).setPreferredWidth(130);
			tbAgendamento.getColumnModel().getColumn(2).setPreferredWidth(130);
			tbAgendamento.getColumnModel().getColumn(3).setPreferredWidth(100);
			tbAgendamento.getColumnModel().getColumn(4).setPreferredWidth(70);
			tbAgendamento.getColumnModel().getColumn(5).setPreferredWidth(130);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void preencheTabelaSearch(JTable tbAgendamento, JDateChooser dt,
			JComboBox cbCliente, JComboBox cbFuncionario) {
		long id_cliente;
		long id_funcionario;
		Date d;
		if (dt == null) {
			try {
				d = (new SimpleDateFormat("dd/MM/yyyy").parse("00/00/0000"));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (cbCliente.getSelectedItem() == null) {
			
			id_cliente = 0;
			
		} else if (cbFuncionario.getSelectedItem() == null) {
			
			id_funcionario = 0;
			
		} else {
			
			try {
				Cliente c = cliDao.importaDados((String) cbCliente.getSelectedItem());
				Funcionario f = funDao.importaDados((String) cbFuncionario.getSelectedItem());
				d = dt.getDate();
				id_cliente = c.getId();
				id_funcionario = f.getId();

				tbAgendamento.setModel(new AgendamentoSrcTabelModel((new SimpleDateFormat("dd/MM/yyyy").format(d)), id_cliente,id_funcionario));
				tbAgendamento.getColumnModel().getColumn(0).setPreferredWidth(130);
				tbAgendamento.getColumnModel().getColumn(1).setPreferredWidth(130);
				tbAgendamento.getColumnModel().getColumn(2).setPreferredWidth(130);
				tbAgendamento.getColumnModel().getColumn(3).setPreferredWidth(100);
				tbAgendamento.getColumnModel().getColumn(4).setPreferredWidth(70);
				tbAgendamento.getColumnModel().getColumn(5).setPreferredWidth(130);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void preencheCbFuncionario(JComboBox cbFuncionario) {
		for (Funcionario f : funDao.getLista()) {
			cbFuncionario.addItem(f.getNome());
		}
	}

	public void preencheCbCliente(JComboBox cbCliente) {
		for (Cliente c : cliDao.getLista()) {
			cbCliente.addItem(c.getNome());
		}
	}

	public void adiciona(JDateChooser dt, JComboBox cbFuncionario,
			JComboBox cbCliente, JComboBox cbHorario, Servico servico) {
		
		Agendamento agendamento = new Agendamento();
		Cliente c = cliDao.importaDados((String) cbCliente.getSelectedItem());
		Funcionario f = funDao.importaDados((String) cbFuncionario
				.getSelectedItem());
		Servico s = servico;
		agendamento.setCliente(c);
		agendamento.setFuncionario(f);
		agendamento.setServico(s);
		agendamento.setData(dt.getDate());
		agendamento.setHorario((String) cbHorario.getSelectedItem());

		dao.adiciona(agendamento);

		JOptionPane.showMessageDialog(null,
				"O Agendamento foi incluido com Sucesso!");

	}

	
	public void carregaAgendamento(JDateChooser dt, JComboBox cbFuncionario,
			JComboBox cbCliente, JComboBox cbHorario, Servico servico,JTable tbAgendamento,JTextField txtServico,
			JComboBox cbFuncionarioAlt,JComboBox cbClienteAlt,JDateChooser dtAlt){
		
		Agendamento agendamento = new Agendamento();
		Cliente c =cliDao.importaDados((String)cbCliente.getSelectedItem());
		Funcionario f =funDao.importaDados((String)cbFuncionario.getSelectedItem());
		preencheCbHorario(cbHorario, dt);
		preencheCbFuncionario(cbFuncionarioAlt);
		preencheCbCliente(cbClienteAlt);
		
		try {
			AgendamentoSrcTabelModel tbModel = new AgendamentoSrcTabelModel((new SimpleDateFormat("dd/MM/yyyy").format(dt.getDate())), c.getId(),f.getId());
			agendamento = tbModel.getAgendamento(tbAgendamento.getSelectedRow());
			
			dtAlt.setDate(agendamento.getData());
			cbHorario.setSelectedItem(agendamento.getHorario());
			servico = agendamento.getServico();
			txtServico.setText(servico.getNome());
			cbFuncionarioAlt.setSelectedItem(agendamento.getFuncionario().getNome());
			cbClienteAlt.setSelectedItem(agendamento.getCliente().getNome());
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}	
	
	public void altera(JTable tbAgendamento,JDateChooser dtAlt, JComboBox cbFuncionarioAlt,
			JComboBox cbClienteAlt, JComboBox cbHorarioAlt, Servico servico, JComboBox cbCliente, JComboBox cbFuncionario,JDateChooser dt) {
		
		Agendamento agendamento = new Agendamento();
		Cliente c =cliDao.importaDados((String)cbCliente.getSelectedItem());
		Funcionario f =funDao.importaDados((String)cbFuncionario.getSelectedItem());
		
		AgendamentoSrcTabelModel tbModel;
		try {
			
			tbModel = new AgendamentoSrcTabelModel((new SimpleDateFormat("dd/MM/yyyy").format(dt.getDate())), c.getId(),f.getId());
			agendamento = tbModel.getAgendamento(tbAgendamento.getSelectedRow());
			
			agendamento.setData(dtAlt.getDate());
			agendamento.setHorario((String)cbHorarioAlt.getSelectedItem());
			agendamento.setServico(servico);;
			agendamento.setCliente(cliDao.importaDados((String)cbClienteAlt.getSelectedItem()));
			agendamento.setFuncionario(funDao.importaDados((String)cbFuncionarioAlt.getSelectedItem()));
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		dao.altera(agendamento);

		JOptionPane.showMessageDialog(null,
				"O Agendamento foi alterado com Sucesso!");

	}
	
	public void remove(JComboBox cbFuncionario,JComboBox cbCliente,JDateChooser dt, JTable tbAgendamento){
		
		Agendamento agendamento = new Agendamento();
		Cliente c =cliDao.importaDados((String)cbCliente.getSelectedItem());
		Funcionario f =funDao.importaDados((String)cbFuncionario.getSelectedItem());
		
		AgendamentoSrcTabelModel tbModel;
		try {
			
			tbModel = new AgendamentoSrcTabelModel((new SimpleDateFormat("dd/MM/yyyy").format(dt.getDate())), c.getId(),f.getId());
			agendamento = tbModel.getAgendamento(tbAgendamento.getSelectedRow());
		} catch (ParseException e){
			
			e.getMessage();
		}
		
		int escolha = JOptionPane.showConfirmDialog(null, "Tem certeza que deseja excluir o Agendamento?");
		if(escolha == 0){
			dao.remove(agendamento);
			JOptionPane.showMessageDialog(null, "O Agendamento foi removido com sucesso");
		}
		else{
			return;
		}		
	}
}
